package com.chenchao.collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * @encoding : UTF-8
 * @Time : 2020/11/12 13:58
 * @Author : Chen Chao
 * @File : javaSE.com.chenchao.javacollection.CollectionTest.java
 * @Software : IntelliJ IDEA
 * @since : 1.8
 */
public class CollectionTest {
    public static void main(String[] args) {
        //collectionTest();
        //collectonMethod();
        collectionTraversal();
        //allMethods();
    }

    /**
     * 集合使用
     */
    public static void collectionTest(){
        Collection c=new ArrayList();
        //Collection是个接口
        boolean abc = c.add("abc");
        boolean abc0 = c.add("abc");
        //boolean返回是否添加成功
        //list(有序)可以添加重复元素，返回值一定位true
        //set不可以添加重复元素，所有要返回值判断

        boolean abc1 = c.add(10);
        //集合只能加引用数据类型
        //它会自动装箱，valueof()

        System.out.println(c);
        //覆盖了Object的toString
    }

    /**
     * 集合常用方法
     */
    public static void collectonMethod(){
        Collection c=new ArrayList();
        //添加元素
        c.add("a");
        c.add("b");
        c.add("c");
        c.add("d");
        System.out.println(c);

        //remove("a")移除元素
        c.remove("a");
        System.out.println(c);

        //clear()清空所有元素
        //c.clear();
        System.out.println(c);

        //isEmpty()判断集合为空
        System.out.println(c.isEmpty());

        //size()获取集合长度
        System.out.println(c.size());
    }

    /**
     * 集合遍历
     */
    public static void collectionTraversal(){
        Collection c=new ArrayList();
        //添加元素
        c.add("a");
        c.add("b");
        c.add("c");
        c.add("d");

        //toArray()集合转数组遍历
        Object[] objects = c.toArray();
        //返回Object型数组,每个元素向上转型
        for (Object object : objects) {
            System.out.println(object);
        }
        //迭代器遍历
        //iterator()在collection接口中声明
        // 每一种实现类都定义了自己的迭代方法
        Iterator iterator = c.iterator();
        while (iterator.hasNext()){
            //判断迭代器是否有元素
            Object next = iterator.next();
            //取出当前元素，向上转型成对象，游标后移一位
            System.out.println(next);
        }
    }

    /**
     * all相关用法
     */
    public static void allMethods(){
        Collection c=new ArrayList();
        //添加元素
        c.add("a");
        c.add("b");
        c.add("c");
        c.add("d");

        Collection c2=new ArrayList();
        //添加元素
        c2.add("a");
        c2.add("b");
        c2.add("c");
        c2.add("d");

        //addAll()把另一个集合所有元素合并到本集合里面
        c.addAll(c2);
        //c.add(c2);
        //add添加的是元素

        //removeAll()删除两个集合的交集(重复元素会重复删除)
        //c.removeAll(c2);
        //System.out.println(c);


        //containsAll()是否全部包含传入集合(不看重复元素)
        //contains()是否包含元素
        System.out.println(c);
        System.out.println(c2);
        boolean contains = c.containsAll(c2);
        boolean c1 = c.contains("c");
        System.out.println(contains);
        System.out.println(c1);

        //retainAll()取交集，删除调用者不包含在指定集合中的所有元素
        boolean b = c.retainAll(c2);
        System.out.println(c);
        System.out.println(b);
        //返回值如果调用者元素改变就true
        //未改变就false
    }
}
